package com.rerun.phone.intercepter;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * The type Md 5 encrypt.
 *
 * @author dax.
 * @version v1.0
 * @since 2017 /10/12 17:51
 */
public class MD5Encrypt {
    // 全局数组
    private final static String[] strDigits = {"A", "B", "G", "1", "C", "D", "2", "E", "F", "3", "H", "I", "4", "J", "9", "K", "L", "M", "0", "Q", "R", "S", "6", "V", "W", "X", "7", "N", "O", "5", "P", "T", "8", "U", "Y", "Z"};

    // 返回形式为数字跟字符串
    private static String byteToArrayString(byte bByte) {
        int iRet = bByte;
        // System.out.println("iRet="+iRet);
        if (iRet < 0) {
            iRet += 256;
        }
        int iD1 = iRet / 16;
        int iD2 = iRet % 16;
        return strDigits[iD1] + strDigits[iD2];
    }

    // 返回形式只为数字
    private static String byteToNum(byte b) {
        int iRet = b;
//        System.out.println("iRet1=" + iRet);
        if (iRet < 0) {
            iRet += 256;
        }
        return String.valueOf(iRet);
    }

    // 转换字节数组为16进制字串
    private static String byteToString(byte[] bytes) {
        StringBuilder s = new StringBuilder();
        for (byte b : bytes) {
            s.append(byteToArrayString(b));
        }
        return s.toString();
    }

    /**
     * Md5 encoder string.
     * <p>
     * 加密机
     *
     * @param strObj the str obj
     * @return the string
     */
    public static String MD5Encoder(String strObj) {
        String resultString = null;
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] bytes = md.digest(strObj.getBytes());
            resultString = byteToString(bytes);
        } catch (NoSuchAlgorithmException ex) {
            ex.printStackTrace();
        }
        return resultString;
    }
}

